Security Hubで90日以上非アクティブなIAMユーザーを検出しEventbridgeとSNSを用いて通知してみた

Security Hubで90日以上非アクティブなIAMユーザーを検出しEventbridgeとSNSを用いて通知してみた

Clock Icon2024.09.10

はじめに

こんにちは。AWS事業本部コンサルティング部に所属している和田響です。

クレジットカード業界のセキュリティ基準であるPCI DSSでは、最後のアクティビティから90日以上たったアカウントは削除または無効化することを求めています。

定義されたアプローチの要件
8.2.6 非アクティブなユーザアカウントは、非アクティブ化された日から 90 日以内に削除または無効化される。

引用:https://listings.pcisecuritystandards.org/documents/PCI-DSS-v4_0-JA.pdf

この記事ではAWSにおけるIAMユーザの管理の一環として、非アクティブなIAMユーザーを特定し通知する仕組みの一例を紹介します。

非アクティブなユーザの検出

今回は非アクティブなユーザの検出の方法として、Security Hubを使用します。
Security Hubの検出できるコントロールのうち、[IAM.8]のコントロールを活用します。

[IAM.8] This control checks whether your IAM users have passwords or active access keys that were not used within the previous 90 days.
[IAM.8] 未使用のIAMユーザー認証情報は削除する必要があります

このコントロールは、IAMユーザーに 90 日間使用されていないパスワードまたはアクティブなアクセスキーがあるかどうかをチェックします。

通知

Security Hubは非常に便利なサービスですが、24時間検出結果を目視し続けることは現実的ではありません。
今回はEventBridgeとSNSを使用して、[IAM.8]のコントロールが失敗になった場合に指定したEメールアドレスに送信します。
Untitled - 2024-09-09T220628.023.png

やってみる

前提

Untitled - 2024-09-09T220543.813.png
今回はSecurity Hubが有効になっていることが前提です。
有効化の手順は以下のリファレンスを参照ください。
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/securityhub-settingup.html

また検証のために90日以上ログインしていないユーザー(wada-test-pcidss)を準備しました。
スクリーンショット 2024-09-09 21.10.20.png

本記事ではこのユーザを検出させて通知させることがゴールです。

SNSトピックの作成

まずはSNSトピックを作成し、通知先のメールアドレスを設定します。
Untitled - 2024-09-09T220837.399.png

「Simple Notification Service」のコンソールを開き、「トピック」をクリックします。
スクリーンショット 2024-09-09 22.10.45.png

「トピックの作成」をクリックします。
スクリーンショット 2024-09-09 22.12.24.png

タイプは「スタンダード」を選択し、「名前」は任意の文字列を記入します。
スクリーンショット 2024-09-09 22.16.48.png

「トピックの作成」をクリックします。
スクリーンショット 2024-09-09 22.17.06.png

正常に作成できたことを確認し、「サブスクリプションの作成」をクリックします。
スクリーンショット 2024-09-09 22.18.35.png

プロトコルは「E メール」を選択、エンドポイントは通知先のEメールアドレスを入力し、「サブスクリプションの作成」をクリックします。
スクリーンショット 2024-09-09 22.21.22.png

正常に作成されたことを確認します。
ステータスが「保留中の確認」となっていますが、これは通知先のメールアドレスの検証が完了していないことを示しています。
スクリーンショット 2024-09-09 22.25.20.png

設定したメールアドレスに「AWS Notification - Subscription Confirmation」の件名のメールがきていることを確認し、「Confirm subscription」をクリックします。
スクリーンショット 2024-09-09 22.28.02.png

「Subscription confirmed!」と表示されることを確認します。
スクリーンショット 2024-09-09 22.29.58.png

先ほどのSNSのサブスクリプションのコンソールを開き、ステータスが「確認済み」になっていることを確認します。
スクリーンショット 2024-09-09 22.31.13.png

EventBridgeの設定

続いてEventBridgeの設定を行っていきます。
Untitled - 2024-09-09T223414.139.png

「EventBridge」のコンソールを開き、「ルールを作成」をクリックします。
(デフォルトでイベントブリッジルールが選択されているはずです)
スクリーンショット 2024-09-09 22.39.21.png

名前は任意の文字列を記入し、次へをクリックします。
スクリーンショット 2024-09-09 22.43.11.png

作成のメソッドは「カスタムパターン (JSON エディタ)」を選択し、イベントパターンに以下のJSONを記入し、「次へ」をクリックします。
ここでは「Security HubのIAM.8のコントロールのステータスがFAILEDだった場合」という条件と指定しています。

{
  "source": ["aws.securityhub"],
  "detail-type": ["Security Hub Findings - Imported"],
  "detail": {
    "findings": {
      "GeneratorId": ["aws-foundational-security-best-practices/v/1.0.0/IAM.8"],
      "Compliance": {
        "Status": ["FAILED"]
      }
    }
  }
}

スクリーンショット 2024-09-09 22.47.15.png

ターゲットタイプは「AWS のサービス」、ターゲットを選択は「SNS トピック」、トピックは先ほど作成したSNSトピックを選択します。
スクリーンショット 2024-09-09 22.50.00.png

「追加設定」タブを開き、ターゲット入力を設定から「入力トランスフォーマーを設定」を選択し、「入力トランスフォーマーを設定」をクリックします。
スクリーンショット 2024-09-09 22.53.29.png

「入力パス」および「テンプレート」に以下のJSONを入力し、「確認」をクリックします。
ここではSNSへ送信するテキストをカスタマイズします。

入力パス

{
  "Account_ID": "$.detail.findings[0].AwsAccountId",
  "Finding_Type": "$.detail.findings[0].Types[0]",
  "Finding_description": "$.detail.findings[0].Description",
  "Resource_Id": "$.detail.findings[0].Resources[0].Id",
  "region": "$.region",
  "severity": "$.detail.findings[0].Severity.Label"
}

テンプレート

"AWS アカウント <Account_ID> に、<region>リージョンで深刻度<severity>の Security Hub 検出結果が見つかりました。"
"検出結果の説明:"
"<Finding_description>."
"影響を受けたリソース:"
"<Resource_Id>"
"詳細はSecurity Hubコンソール (https://<region>.console.aws.amazon.com/securityhub/home?region=<region>#/summary) をご確認ください。"

スクリーンショット 2024-09-09 23.00.44.png

「次へ」をクリックします。
スクリーンショット 2024-09-09 23.01.49.png

任意でタグを設定し「次へ」をクリックします。
スクリーンショット 2024-09-09 23.02.41.png

作成内容を確認し「ルールの作成」をクリックします。
スクリーンショット 2024-09-09 23.03.50.png

これで通知の設定は完了です。

メールの確認

EventBridge設定以降のセキュリティチェックでIAM.8の検出結果がFAILEDになった場合、
以下のようなメールがSNSに設定したメールアドレスに届きます。
スクリーンショット 2024-09-10 9.34.02.png

※セキュリティチェックは12または24時間ごとに実施されます。

定期的なセキュリティチェック
定期的なセキュリティチェックは、最新の実行から 12 または 24 時間以内に自動的に実行されます。周期は Security Hub によって決定され、変更はできません。定期的なコントロールは、チェック実行時の評価を反映したものになります。

メール通知のテキストを変更したい場合は、EventBridgeの「入力トランスフォーマーを設定」を変更することで可能です。
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-transform-target-input.html

最後に

今回は「Security Hub + EventBridge + SNS」の構成で、90日以上非アクティブなユーザーをメールアドレスに通知する仕組みを実装してみました。

本記事では通知までの説明でした。通知後の修正対応は以下の記事を参照ください。
https://dev.classmethod.jp/articles/securityhub-fsbp-remediation-iam-8/

セキュアなIAMユーザー運用の一助になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.